package writtenTraining.day39;

import java.util.*;

/**
 * day39：（1）哈希+字符串:神奇的字母（二）
 */

public class Main {
    public static void main(String[] args) {
//         哈希 + 字符串
        //         输入数据
        Scanner in =new Scanner(System.in);
        int[] hash = new int[26];
        while(in.hasNext()) {
            char[] chs = in.nextLine().toCharArray();
            int len = chs.length;
            for(int i = 0; i < len; i++) {
                char ch = chs[i];
//                 统计每种字符个数
                if(chs[i] >= 'a' && chs[i] <= 'z') {
                    hash[chs[i] - 'a']++;
                }
            }
        }
        
//         寻找最大数量的字符
        int maxCount = -0x3f3f3f3f;
        char ret = 'a';
        for(int i = 0; i < 26;i++) {
            if(hash[i] > maxCount) {
                maxCount = hash[i];
                ret = (char)(i + 'a');
            }
        }
        
        // 输出结果
        System.out.println(ret);
    }
}

/**
 * day39（2）:哈希 + 哈夫曼编码 + 优先级队列：MT7 字符编码
 */


 class Main2 {
    public static void main(String[] args) {
        // 哈希 + 哈夫曼编码 + 优先级队列
        // 输入数据
        Scanner in = new Scanner(System.in);
        while(in.hasNext()) {
            String str = in.next();
            int len = str.length();
            int[] hash = new int[1000];
            for(int i = 0; i < len; i++) {
                char ch = str.charAt(i);
                hash[ch]++;
            }

            // 建立小跟堆并加入
            PriorityQueue<Integer> queue = new PriorityQueue<>(
                    (a,b)->a.compareTo(b)
            );
            for(int i = 0; i < 1000; i++) {
                if(hash[i] != 0) {
                    queue.add(hash[i]);
                }
            }

            long ret = 0L;
            // 调整
            while(queue.size() > 1) {
                int num1 = queue.poll();
                int num2 = queue.poll();

                ret += (num1 + num2);
                queue.add(num1 + num2);
            }


            // 输出结果
            System.out.println(ret);
        }
    }
}


/**
 * day39:（3）动态规划 + 完全背包问题：DP43 最少的完全平方数
 */


class Main3 {
    public static void main(String[] args) {
        // 动态规划  + 完全背包

        // 输入数据
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();

        // 创建dp
        int[] dp = new int[n + 1];

        // 初始化
        for(int i = 0; i <= n ; i++) {
            // 只有 i 不符合条件
            dp[i] = 0x3f3f3f3f;
        }

        dp[0] = 0;

        // 填表
        for(int i = 1; i * i <= n ; i++) {
            for(int j = i * i; j <= n; j++) {
                dp[j] = Math.min(dp[j],
                        dp[j - (i * i)] + 1);
            }
        }

        // 输出
        System.out.println(dp[n]);
    }
}